package com.nidu.demo.role.gateway;

import com.nidu.demo.role.model.RoleMenu;

import java.util.Set;
import java.util.Map;
import java.util.List;

/**
 * 角色菜单网关接口
 * 提供领域层对角色菜单的访问能力
 *
 * @author auto
 */
public interface RoleMenuGateway {

    /**
     * 绑定角色与菜单的关系（新增）
     */
    void bindRoleMenus(Long roleId, Set<Long> menuIds);

    /**
     * 重新绑定角色菜单（先删再增，更新绑定关系）
     */
    void rebindRoleMenus(Long roleId, Set<Long> menuIds);

    /**
     * 删除角色所有菜单绑定关系
     */
    void removeRoleMenus(Long roleId);

    /**
     * 删除菜单所有角色绑定关系
     */
    void removeMenuRoles(Long menuId);

    /**
     * 删除角色列表下所有菜单绑定关系
     */
    void removeRolesMenus(Set<Long> roleIds);

    /**
     * 删除菜单列表下所有菜单绑定关系
     */
    void removeMenusRoles(Set<Long> menuIds);

    /**
     * 查询用户拥有的角色ID列表
     */
    Set<Long> getMenuIdsByRoleId(Long roleId);

    /**
     * 查询角色下绑定的所有用户ID列表
     */
    Set<Long> getRoleIdsByMenuId(Long menuId);

    /**
     * 查询角色ID列表拥有的菜单ID列表
     */
    Map<Long, List<RoleMenu>> getByRoleIds(Set<Long> roleIds);

    /**
     * 查询菜单下绑定的所有角色ID列表
     */
    Map<Long, List<RoleMenu>> getByMenuIds(Set<Long> menuId);

}
